﻿
using ExcellentProjectPlus.Aplicacion.Cuestionarios.Preguntas;
using ExcellentProjectPlus.Dominio.Cuestionarios.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;

namespace Servicios.Cuestionarios.Controllers
{
    public class PreguntasController : ApiController
    {
        #region Propiedades
        IServicioDeGestionDePreguntas _servicioDeGestionDePreguntas;
        #endregion

        #region Constructores
        public PreguntasController(IServicioDeGestionDePreguntas servicioDeGestionDePreguntas)
        {
            _servicioDeGestionDePreguntas = servicioDeGestionDePreguntas;
        }
        #endregion

        //GET
        [HttpGet]
        [ResponseType (typeof(Pregunta))]
        public IHttpActionResult ObtenerTodos()
        {
            IEnumerable<Pregunta> preguntas = _servicioDeGestionDePreguntas.ObtenerPreguntas();
            if (preguntas == null)
            {
                return NotFound();
            }

            return Ok(preguntas);
        }


        //GET
        [HttpGet]
        [Route("api/preguntas/{id}")]
        [ResponseType(typeof(Pregunta))]
        public IHttpActionResult ObtenerPreguntaPorId(int id)
        {
            Pregunta pregunta = _servicioDeGestionDePreguntas.ObtenerPreguntaPorId(id);
            if (pregunta == null)
            {
                return NotFound();
            }

            return Ok(pregunta);
        }

        [HttpPost]
        [ResponseType (typeof(Pregunta))]
        public IHttpActionResult PostPregunta(Pregunta pregunta)
        {
            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            _servicioDeGestionDePreguntas.AgregarPregunta(pregunta);

            return CreatedAtRoute("DefaultApi", new { id = pregunta.IdPregunta }, pregunta);
        }

        [HttpPut]
        [Route("api/preguntas/{id}")]
        [ResponseType(typeof(Pregunta))]
        public IHttpActionResult PutPregunta(int id, [FromBody]Pregunta pregunta)
        {
            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            if (id != pregunta.IdPregunta)
                return BadRequest();

            _servicioDeGestionDePreguntas.ModificarPregunta(pregunta);

            return StatusCode(HttpStatusCode.NoContent);

        }

        [HttpDelete]
        [Route("api/preguntas/{id}")]
        [ResponseType(typeof(Pregunta))]
        public IHttpActionResult DeletePregunta(int id)
        {
            Pregunta pregunta = _servicioDeGestionDePreguntas.ObtenerPreguntaPorId(id);

            if (pregunta == null)            
                return NotFound();

            _servicioDeGestionDePreguntas.EliminarPregunta(pregunta);
            return Ok(pregunta);
        }
    }
}